package com.yehongyu.mytools.core.reflect;

import java.lang.reflect.Array;

/**
 * 动态创建和访问数组
 * @author yingyang
 * @since 2011-11-15
 */
public class ArrayTester {
    public static void main(String args[]) throws Exception {
    	/**创建了一个长度为10 的字符串数组，接着把索引位置为5 的元素设为“hello”，然后再读取索引位置为5 的元素的值*/
        Class<?> classType = Class.forName("java.lang.String");
        // 创建一个长度为10的字符串数组
        Object array = Array.newInstance(classType, 10);
        // 把索引位置为5的元素设为"hello"
        Array.set(array, 5, "hello");
        // 获得索引位置为5的元素的值
        String s = (String) Array.get(array, 5);
        System.out.println(s);
        
        /**创建了一个 5 x 10 x 15 的整型数组，并把索引位置为[3][5][10] 的元素的值为设37。*/
        int[] dims = new int[]{5, 10, 15};
        //创建一个具有指定的组件类型和维度的新数组。
        Object array2 = Array.newInstance(Integer.TYPE, dims);
       
        Object arrayObj = Array.get(array2, 3);
        Class<?> cls = arrayObj.getClass().getComponentType();
        System.out.println(cls);
 
        arrayObj = Array.get(arrayObj, 5);
        Array.setInt(arrayObj, 10, 37);
        int arrayCast[][][] = (int[][][]) array2;
        System.out.println(arrayCast[3][5][10]);
    }
}
